home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacApp Release 10 / MacApp Release 10 - HD Ready / Libraries / Views / Sources / UTabBehaviors.cp < prev    next >
Encoding:
Text File  |  1996-04-03  |  9.5 KB  |  318 lines  |  [TEXT/MPS ]

  1. //----------------------------------------------------------------------------------------
  2. // UTabBehaviors.cp 
  3. // Copyright © 1984-96 by Apple Computer, Inc. All rights reserved.
  4. //----------------------------------------------------------------------------------------
  5.  
  6. #ifndef __UTABBEHAVIORS__
  7. #include "UTabBehaviors.h"
  8. #endif
  9.  
  10. // MacApp
  11.  
  12. //    #ifndef __UAPPLICATION__
  13. //    #include "UApplication.h"
  14. //    #endif
  15.  
  16. #ifndef __UDISPATCHER__
  17. #include "UDispatcher.h"
  18. #endif
  19.  
  20. #ifndef __UEVENT__
  21. #include "UEvent.h"
  22. #endif
  23.  
  24. #ifndef __UMACAPPGLOBALS__
  25. #include "UMacAppGlobals.h"
  26. #endif
  27.  
  28. #ifndef __UMACAPPUTILITIES__
  29. #include "UMacAppUtilities.h"
  30. #endif
  31.  
  32. #ifndef __USTREAM__
  33. #include "UStream.h"
  34. #endif
  35.  
  36. #ifndef __UWINDOW__
  37. #include "UWindow.h"
  38. #endif
  39.  
  40. //========================================================================================
  41. // CLASS TTabber
  42. //========================================================================================
  43. #undef Inherited
  44. #define Inherited TBehavior
  45.  
  46. #pragma segment MAOpen
  47. MA_DEFINE_CLASS_M1(TTabber, Inherited);
  48.  
  49. //----------------------------------------------------------------------------------------
  50. // TTabber constructor
  51. //----------------------------------------------------------------------------------------
  52. #pragma segment MAOpen
  53.  
  54. TTabber::TTabber()
  55.     : fRecursive(TRUE),
  56.       fFoundCurrent(FALSE),
  57.       fFirst(NULL),
  58.       fNext(NULL)
  59. {
  60. } // TTabber::TTabber
  61.  
  62. //----------------------------------------------------------------------------------------
  63. // TTabber destructor
  64. //----------------------------------------------------------------------------------------
  65. #pragma segment MADestructorRes
  66.  
  67. TTabber::~TTabber()
  68. {
  69. }
  70.  
  71. //----------------------------------------------------------------------------------------
  72. // TTabber::ITabber: 
  73. //----------------------------------------------------------------------------------------
  74. #pragma segment MAOpen
  75.  
  76. void TTabber::ITabber(Boolean recursive)
  77. {
  78.     this->IBehavior(kTabBehavior);
  79.  
  80.     fRecursive = recursive;
  81. } // TTabber::ITabber 
  82.  
  83. //----------------------------------------------------------------------------------------
  84. // TTabber::ReadFrom: 
  85. //----------------------------------------------------------------------------------------
  86. #pragma segment MAReadResource
  87.  
  88. void TTabber::ReadFrom(TStream* aStream)                // override 
  89. {
  90.     Inherited::ReadFrom(aStream);
  91.  
  92.     fRecursive = aStream->ReadBoolean();
  93. } // TTabber::ReadFrom 
  94.  
  95. //----------------------------------------------------------------------------------------
  96. // TTabber::WriteTo: 
  97. //----------------------------------------------------------------------------------------
  98. #pragma segment MAWriteResource
  99.  
  100. void TTabber::WriteTo(TStream* aStream)                // override 
  101. {
  102.     Inherited::WriteTo(aStream);
  103.  
  104.     aStream->WriteBoolean(fRecursive);
  105. } // TTabber::WriteTo 
  106.  
  107. //----------------------------------------------------------------------------------------
  108. // TTabber::DoKeyEvent: 
  109. //----------------------------------------------------------------------------------------
  110. #pragma segment MATabBehaviorRes
  111.  
  112. void TTabber::DoKeyEvent(TToolboxEvent* event)
  113. {
  114.     if (event && event->fText == chTab)
  115.         this->Tab(event->IsShiftKeyPressed());
  116.     else
  117.         Inherited::DoKeyEvent(event);
  118. } // TTabber::DoKeyEvent 
  119.  
  120. //----------------------------------------------------------------------------------------
  121. // TTabber::Tab: 
  122. //----------------------------------------------------------------------------------------
  123. #pragma segment MATabBehaviorRes
  124.  
  125. void TTabber::Tab(Boolean tabBackward)
  126. {
  127.     this->Reset();
  128.  
  129.     this->FindTargets(tabBackward);
  130.     
  131.     if (fNext == NULL)
  132.         fNext = fFirst;
  133.     
  134.     if (fNext)
  135.     {
  136.         if (fNext->BecomeTarget())
  137.             fNext->SetTargetSelection(kRedraw);
  138.     }
  139. } // TTabber::Tab 
  140.  
  141. //----------------------------------------------------------------------------------------
  142. // TTabber::Reset: 
  143. //----------------------------------------------------------------------------------------
  144. #pragma segment MATabBehaviorRes
  145.  
  146. void TTabber::Reset()
  147. {
  148.     fFirst = NULL;
  149.     fNext = NULL;
  150.     fFoundCurrent = FALSE;
  151. } // TTabber::Reset 
  152.  
  153. //----------------------------------------------------------------------------------------
  154. // TTabber::FindSubViewTargets: 
  155. //----------------------------------------------------------------------------------------
  156. #pragma segment MATabBehaviorRes
  157.  
  158. void TTabber::FindSubViewTargets(TView* parent,
  159.                                         Boolean tabBackward)
  160. {
  161.     CSubViewIterator iter(parent,!tabBackward);
  162.  
  163.     for (TView* aView = iter.FirstSubView(); iter.More(); aView = iter.NextSubView())
  164.     {
  165.         Boolean canBeTarget = aView->IsEnabled() && aView->IsShown() && aView->WantsToBeTarget();
  166.  
  167.         if ((fFirst == NULL) && canBeTarget)
  168.             fFirst = aView;
  169.         if (aView->IsTarget())
  170.             fFoundCurrent = TRUE;
  171.         else if (fFoundCurrent && (fNext == NULL) && canBeTarget)
  172.         {
  173.             fNext = aView;
  174.             return;
  175.         }
  176.  
  177.         if (fRecursive)
  178.             this->FindSubViewTargets(aView,tabBackward);
  179.     }
  180. } // TTabber::FindSubViewTargets 
  181.  
  182. //----------------------------------------------------------------------------------------
  183. // TTabber::FindTargets: 
  184. //----------------------------------------------------------------------------------------
  185. #pragma segment MATabBehaviorRes
  186.  
  187. void TTabber::FindTargets(Boolean /* tabBackward */)
  188. {
  189.     this->SubClassResponsibility();
  190. } // TTabber::FindTargets 
  191.  
  192. //----------------------------------------------------------------------------------------
  193. // TTabber::GetStandardSignature:
  194. //----------------------------------------------------------------------------------------
  195. #pragma segment MAWriteResource
  196.  
  197. IDType TTabber::GetStandardSignature()
  198. {
  199.     return kTabBehavior;
  200. } // TTabber::GetStandardSignature
  201.  
  202. //========================================================================================
  203. // CLASS TMultiWindowTabber
  204. //========================================================================================
  205. #undef Inherited
  206. #define Inherited TTabber
  207.  
  208. #pragma segment MAOpen
  209. MA_DEFINE_CLASS_M1(TMultiWindowTabber, Inherited);
  210.  
  211. //----------------------------------------------------------------------------------------
  212. // TMultiWindowTabber::TMultiWindowTabber: Empty constructor to satisfy the compiler.
  213. //----------------------------------------------------------------------------------------
  214. #pragma segment ConstructorRes
  215.  
  216. TMultiWindowTabber::TMultiWindowTabber()
  217. {
  218. } // TMultiWindowTabber::TMultiWindowTabber
  219.  
  220. //----------------------------------------------------------------------------------------
  221. // TMultiWindowTabber destructor
  222. //----------------------------------------------------------------------------------------
  223. #pragma segment MADestructorRes
  224.  
  225. TMultiWindowTabber::~TMultiWindowTabber()
  226. {
  227. }
  228.  
  229. //----------------------------------------------------------------------------------------
  230. // TMultiWindowTabber::IMultiWindowTabber: 
  231. //----------------------------------------------------------------------------------------
  232. #pragma segment MAOpen
  233.  
  234. void TMultiWindowTabber::IMultiWindowTabber(Boolean recursive)
  235. {
  236.     this->ITabber(recursive);
  237. } // TMultiWindowTabber::IMultiWindowTabber 
  238.  
  239. //----------------------------------------------------------------------------------------
  240. // TMultiWindowTabber::FindTargets: 
  241. //----------------------------------------------------------------------------------------
  242. #pragma segment MATabBehaviorRes
  243.  
  244. void TMultiWindowTabber::FindTargets(Boolean tabBackward)    // Override
  245. {
  246.     TWindow* theFrontWindow = gDispatcher->WMgrToWindow(FrontWindow());
  247.     
  248.     if (theFrontWindow)    
  249.         if (theFrontWindow->IsModal())
  250.             this->FindSubViewTargets(theFrontWindow,tabBackward);
  251.         else
  252.         {
  253.             CWMgrIterator iter(!tabBackward);
  254.             
  255.             for (WindowRef aWinPtr = iter.FirstWMgrWindow(); iter.More(); aWinPtr = iter.NextWMgrWindow())
  256.             {
  257.                 TWindow* aWindow = gDispatcher->WMgrToWindow(aWinPtr);
  258.             
  259.                 if ((aWindow) && (aWindow->IsShown()) && (aWindow->IsActive()))
  260.                     this->FindSubViewTargets(aWindow,tabBackward);
  261.             }
  262.         }
  263. } // TMultiWindowTabber::FindTargets 
  264.  
  265.  
  266. //========================================================================================
  267. // CLASS TViewTabber
  268. //========================================================================================
  269. #undef Inherited
  270. #define Inherited TTabber
  271.  
  272. #pragma segment MAOpen
  273. MA_DEFINE_CLASS_M1(TViewTabber, Inherited);
  274.  
  275. //----------------------------------------------------------------------------------------
  276. // TViewTabber::TViewTabber: Empty constructor to satisfy the compiler.
  277. //----------------------------------------------------------------------------------------
  278. #pragma segment ConstructorRes
  279.  
  280. TViewTabber::TViewTabber()
  281. {
  282. } // TViewTabber::TViewTabber
  283.  
  284. //----------------------------------------------------------------------------------------
  285. // TViewTabber destructor
  286. //----------------------------------------------------------------------------------------
  287. #pragma segment MADestructorRes
  288.  
  289. TViewTabber::~TViewTabber()
  290. {
  291. }
  292.  
  293. //----------------------------------------------------------------------------------------
  294. // TViewTabber::IViewTabber: 
  295. //----------------------------------------------------------------------------------------
  296. #pragma segment MAOpen
  297.  
  298. void TViewTabber::IViewTabber(Boolean recursive)
  299. {
  300.     this->ITabber(recursive);
  301. } // TViewTabber::IViewTabber 
  302.  
  303. //----------------------------------------------------------------------------------------
  304. // TViewTabber::FindTargets: 
  305. //----------------------------------------------------------------------------------------
  306. #pragma segment MATabBehaviorRes
  307.  
  308. void TViewTabber::FindTargets(Boolean tabBackward)    // Override
  309. {
  310.     this->FindSubViewTargets( (TView*) fOwner, tabBackward);
  311. } // TViewTabber::FindTargets 
  312.  
  313.  
  314. //----------------------------------------------------------------------------------------
  315. // End of UTabBehaviors.cp
  316.  
  317. #pragma segment Inline
  318.